(Pentest (penetration test - נסיון חדירה למערכת, על מנת לבדוק את רמת הבטיחות שלה.
כולנו מדי פעם רוצים לנסות את הידע התיאורתי שלנו באבטחת מידע על מערכות אמיתיות. רק שרוב הפעמים זה לא חוקי, ויכול לגרום לנו לבעיות. במיוחד בשביל אנשים כמונו,אני יציג כמה מקומות בהם אפשר לבצע פנטסט בצורה חוקית לגמרי.
Mutillidae
Mutillidae זהו פרויקט שמיישם 10 חורים מתוך רשימת OWASP Top 10, כשזאת רשימה מתחדשת של 10 חורים הכי נפוצים באתרי אינטרנט. האמת שהרשימה המתחדשת הזאת לא התחדשה מ 2010, אבל ב2013 זה אותם 10 חורים.
קישור להורדה
כדי להריץ את Mutillidae אתם צריכים שרת שמריץ PHP.
כנסו לקובץ: classes/MySQLHandler.php
ותכתבו שם את שם המשתמש וסיסמה של אחד המשתמשים שלכם ב MySQL
DVWA
בדומה לפרויקט הקודם, מחלק את השלבים לפי סוגי החורים. בנוסף מציע קישורים עם מידע נוסף על החור, כדי שתוכלו ללמוד בנושא יותר אם לא הצלחתם לעבור את המשימה.
קישור להורדה
גם פה אתם צריכים שרת שמריץ PHP. פרטי גישה לMySQL תרשמו בקובץ הזה: config/config.inc.php
בנוסף הפרויקט יבקש מכם שם משתמש וסיסמה:
שם משתמש: Admin
סיסמה: Password
hackthissite.org
כאן אתם כבר לא צריכים להוריד שום דבר למחשב שלכם, אתם עוברים שלבים אונליין, צריך אבל להירשם.
השלבים הראשונים קצת פשוטים...
enigmagroup.org
עוד אתר כמו למעלה עם משימות לפריצה, גם דורש הרשמה. זה אתר יותר מומלץ.
XSS
canyouxssthis.com/HTMLSanitize
html5sec.org/xssme.php
xssme.html5sec.org
לסיכום
לסיכום אני יתן חידה שראיתי איפשהו. זאת התחברות באתר כלשהו:
<?php
$pass = isset($_GET['pass'])?$_GET['pass']:'';
if ( strcasecmp( $pass, '123456' ) == 0 )
{
echo 'You successfully logged in.';
}
$pass = isset($_GET['pass'])?$_GET['pass']:'';
if ( strcasecmp( $pass, '123456' ) == 0 )
{
echo 'You successfully logged in.';
}
הסיסמה היא 123456, אבל ניתן להתחבר פה גם מבלי לדעת את הסיסמה
איך?
תגובות לכתבה:
אחלה כתבה :)
ה-hackThisSite בהחלט אחד המאתגרים.
הייתי מנסה גם damn vulnerable web app. השם שלה מגניב .
על הקוד האחרון צריך לחשוב קצת
אפשר לנסות את הידע התיאורטי שלנו על http://boomboom.co.il ? :)
כן חח, אפשר
מישהו פתר את החידה בסוף ויכול לתת רמז?
אני פתרתי, תשלחו get בסגנון הזה:
pass[]=blablabla?
יתן שגיאה ויחבר אותנו לאתר.
שגיאה זה לא יתן, אבל אתה יכול לנסות להסביר למה זה יעבוד
למה לא כתוב בדוקומנטציה שפונקציה כזאת, שאמורה לקבל מחרוזות, והיא מקבלת מערך - מחזירה null?
לי בוומפ זה נתן שגיאה.
וזה מחבר אותנו כי הפונקצייה מחזירה 0 כשהיא מבולבלת (נראה לי).
זה אמור לתת Warning.
זה בגלל שבתנאי שלנו לא בדקנו שזה גם אותו סוג משתנה (===), ולכן במקרה הזה, כשהוחזר מהפונקציה null - התנאי התקיים. (null == 0.)
כן, כבר רשמו בתגובות את התשובה, אבל אני יכתוב אותה במסודר.
הפונקציה מצפה לקבל משתנה עם ערך אחד, ואם היא מקבלת מערך היא מחזירה NULL, והבדיקה (if(NULL == 0 תחזיר אמת. כדי שזה לא יקרה, צריך או להשתמש ב (===) שיבדוק גם שהמשתנים מאותו סוג, או לבדוק לפני שהמשתנה מסוג מחרוזת(is_string).
באמת צריך להיות רשום בדוקומנטציה שפונקציה מחזירה במקרים מסוימים NULL, שלחתי לגבי זה באג רפורט.